const {
    AsyncParallelHook
} = require("tapable"); //异步并行执行钩子
const hook = new AsyncParallelHook(["name", "age"]);
console.time("cost");

// tapAsync 异步注册，全部任务完成后执行最终的回调

// hook.tapAsync("1", function (name, callback) {
//     setTimeout(function () {
//         callback();
//     }, 1000);
// });
// hook.tapAsync("2", function (name, callback) {
//     setTimeout(function () {
//         callback();
//     }, 2000);
// });
// hook.tapAsync("3", function (name, callback) {
//     setTimeout(function () {
//         callback();
//     }, 3000);
// });
// hook.callAsync("zhufeng", (err) => {
//     console.log(err); 
//     console.timeEnd("cost"); 
// });

// promise 注册钩子全部完成后执行才算成功

hook.tapPromise("1", (name, age) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve();
        }, 1000);
    });
});
hook.tapPromise("2", (name, age) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve();
        }, 2000);
    });
});
hook.tapPromise("3", (name, age) => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve();
        }, 3000);
    });
});
hook.promise("zhufeng", 12).then((result) => {
    console.log(result);
    console.timeEnd("cost");
});

// ==>
// undefined
// cost: 3.009s